
proc init {cellpath otherInfo} {

	set cell_handle [get_bd_cells $cellpath]
	set all_busif [get_bd_intf_pins $cellpath/*]
	set axi_standard_param_list [list ]
	set full_sbusif_list [list  ]

	foreach busif $all_busif {
		if { [string equal -nocase [get_property MODE $busif] "slave"] == 1 } {
			set busif_param_list [list]
			set busif_name [get_property NAME $busif]
			if { [lsearch -exact -nocase $full_sbusif_list $busif_name ] == -1 } {
			    continue
			}
			foreach tparam $axi_standard_param_list {
				lappend busif_param_list "C_${busif_name}_${tparam}"
			}
			bd::mark_propagate_only $cell_handle $busif_param_list
		}
	}
}

proc pre_propagate {cellpath otherInfo} {

	set cell_handle [get_bd_cells $cellpath]
	set all_busif [get_bd_intf_pins $cellpath/*]
	set axi_standard_param_list [list ]

	foreach busif $all_busif {
		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {
			continue
		}
		if { [string equal -nocase [get_property MODE $busif] "master"] != 1 } {
			continue
		}

		set busif_name [get_property NAME $busif]
		foreach tparam $axi_standard_param_list {
			set busif_param_name "C_${busif_name}_${tparam}"

			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]
			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]

			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {
				if { $val_on_cell != "" } {
					set_property CONFIG.${tparam} $val_on_cell $busif
				}
			}
		}
	}
}

proc propagate {cellpath otherInfo} {

	set cell_handle [get_bd_cells $cellpath]
	set all_busif [get_bd_intf_pins $cellpath/*]
	set axi_standard_param_list [list ]

	foreach busif $all_busif {
		if { [string equal -nocase [get_property CONFIG.PROTOCOL $busif] "AXI4"] != 1 } {
			continue
		}
		if { [string equal -nocase [get_property MODE $busif] "slave"] != 1 } {
			continue
		}

		set busif_name [get_property NAME $busif]
		foreach tparam $axi_standard_param_list {
			set busif_param_name "C_${busif_name}_${tparam}"

			set val_on_cell_intf_pin [get_property CONFIG.${tparam} $busif]
			set val_on_cell [get_property CONFIG.${busif_param_name} $cell_handle]

			if { [string equal -nocase $val_on_cell_intf_pin $val_on_cell] != 1 } {
				#override property of bd_interface_net to bd_cell -- only for slaves.  May check for supported values..
				if { $val_on_cell_intf_pin != "" } {
					set_property CONFIG.${busif_param_name} $val_on_cell_intf_pin $cell_handle
				}
			}
		}
	}
}
